// typedef struct Node
// {
//     int data;
//     struct Node* next;
// }* linklist;
// //等价于
// typedef struct Node
// {
//     int data;
//     struct Node* next;
// };
// typedef struct Node* linklist;


// #include <stdio.h>
// #include <stddef.h>
// struct S1
// {
//     char c1;
//     int i;
//     char c2;
// };
// struct S2
// {
//     char c1;
//     char c2;
//     int i;
// };
// int main()
// {
//     printf("%d\n",sizeof(struct S1));//12
//     printf("%d\n",sizeof(struct S2));//8
//     printf("%d\n",offsetof(struct S1,c1));//offset宏用于求一个变量在结构体中的偏移量 
//     printf("%d\n",offsetof(struct S1,i));
//     printf("%d\n",offsetof(struct S1,c2));
//     return 0;
// }




//位段的空间分配
#include <stdio.h>
struct S
{
    char a : 3;
    char b : 4;
    char c : 5;//再开辟一个字节 直接用 上一个字节剩余的一个比特位浪费
    char d : 4;
};
int main()
{
    printf("%d\n",sizeof(struct S));
    struct S s = {0};
    //在每个字节内 先放右侧 如a占三位 就是1010截断 010
    //0000 0010 
    //依此类推 010三位 1100四位  11五位  100四位
    //01100010 00000011 00000100  0x6234
    s.a = 10;
    s.b = 12;
    s.c = 3;
    s.d = 4;
}

